#pragma once
#include <vector>
#include "opencv2/myopencv.hpp"

class Color2GrayMapper {
private:
	static Color2GrayMapper *me;
public:
	cv::Mat intriMatC, intriMatG;
	cv::Mat distortMatC, distortMatG;
	std::vector<cv::Mat> rvecsC, rvecsG, tvecsC, tvecsG;

	cv::Mat R,T,R1,T1,R2,T2;
	double k1,k2,k3,p1,p2;
	double edgeLen;

	int width, height;

public:
	static Color2GrayMapper *GetInstance(void);

	void load(void);

	void init(void);

	cv::Mat mapping(const cv::Mat& color, const cv::Mat& dcMapped, const cv::Rect& inRect,
		cv::Rect& outRect, double edgeInMM = -1);

	cv::Mat mapping(const cv::Mat& color, const cv::Mat& dcMapped, const cv::Rect& inRect,
		double edgeInMM = -1);

	cv::Mat mapping(const cv::Mat& color, const cv::Mat& dcMapped, double scale = 263);

	cv::Mat mapping(cv::Mat P, short dval, double scale = 263);

};
